package com.keba.lamp.tenant.service.impl;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.BooleanUtil;
import cn.hutool.core.util.RandomUtil;
import com.keba.basic.context.ContextUtil;
import com.keba.basic.database.mybatis.conditions.Wraps;
import com.keba.basic.utils.ArgumentAssert;
import com.keba.lamp.common.constant.BizConstant;
import com.keba.lamp.common.constant.AppendixType;
import com.keba.lamp.file.service.AppendixService;
import com.keba.lamp.model.vo.save.AppendixSaveVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import com.keba.lamp.tenant.service.DefTenantAppConfigService;
import com.keba.basic.base.service.impl.SuperServiceImpl;
import com.keba.lamp.tenant.manager.DefTenantAppConfigManager;
import com.keba.lamp.tenant.entity.DefTenantAppConfig;
import com.keba.lamp.tenant.vo.save.DefTenantAppConfigSaveVO;
import com.keba.lamp.tenant.vo.update.DefTenantAppConfigUpdateVO;

import java.util.Objects;

/**
 * <p>
 * 业务实现类
 * 租户app配置
 * </p>
 *
 * @author twg
 * @date 2025-06-15 18:10:20
 * @create [2025-06-15 18:10:20] [twg] [代码生成器生成]
 */
@Slf4j
@RequiredArgsConstructor
@Service
public class DefTenantAppConfigServiceImpl extends SuperServiceImpl<DefTenantAppConfigManager, Long, DefTenantAppConfig> implements DefTenantAppConfigService {

    private final AppendixService appendixService;

    @Override
    public DefTenantAppConfig getByAppId(String appId) {
        return getSuperManager().getOne(Wraps.<DefTenantAppConfig>lbQ().eq(DefTenantAppConfig::getAppId, appId));
    }

    @Override
    public DefTenantAppConfig getByTenantId() {
        DefTenantAppConfig defTenantAppConfig = super.superManager.getOne(Wraps.<DefTenantAppConfig>lbQ().eq(DefTenantAppConfig::getTenantId, ContextUtil.getTenantId()));
        if (Objects.isNull(defTenantAppConfig)) {
            defTenantAppConfig = saveBefore(new DefTenantAppConfigSaveVO().setH5State(BooleanUtil.toInteger(Boolean.FALSE)).setMpState(BooleanUtil.toInteger(Boolean.FALSE)));
            superManager.save(defTenantAppConfig);
        }
        return defTenantAppConfig;
    }

    @Override
    public DefTenantAppConfig getAdminAppConfig() {
        DefTenantAppConfig defTenantAppConfig = super.superManager.getOne(Wraps.<DefTenantAppConfig>lbQ().eq(DefTenantAppConfig::getTenantId, BizConstant.ADMIN_TENANT_ID));
        if (Objects.isNull(defTenantAppConfig)) {
            defTenantAppConfig = saveBefore(new DefTenantAppConfigSaveVO().setH5State(BooleanUtil.toInteger(Boolean.FALSE)).setMpState(BooleanUtil.toInteger(Boolean.FALSE)));
            superManager.save(defTenantAppConfig);
        }
        return defTenantAppConfig;
    }
    @Override
    protected <SaveVO> DefTenantAppConfig saveBefore(SaveVO saveVO) {
        DefTenantAppConfigSaveVO defTenantAppConfigSaveVO = (DefTenantAppConfigSaveVO) saveVO;
        ArgumentAssert.isFalse(BooleanUtil.toInteger(Boolean.FALSE).equals(defTenantAppConfigSaveVO.getH5State()) &&
                BooleanUtil.toInteger(Boolean.TRUE).equals(defTenantAppConfigSaveVO.getMpState()), "H5状态不能为关闭");
        DefTenantAppConfig defTenantAppConfig = BeanUtil.toBean(saveVO, getEntityClass());
        return defTenantAppConfig.setTenantId(ContextUtil.getTenantId()).setAppId(RandomUtil.randomStringLowerWithoutStr(5, "oO0"));
    }

    @Override
    protected <UpdateVO> DefTenantAppConfig updateBefore(UpdateVO updateVO) {
        DefTenantAppConfigUpdateVO defTenantAppConfigUpdateVO = (DefTenantAppConfigUpdateVO) updateVO;
        ArgumentAssert.isFalse(BooleanUtil.toInteger(Boolean.FALSE).equals(defTenantAppConfigUpdateVO.getH5State()) &&
                        BooleanUtil.toInteger(Boolean.TRUE).equals(defTenantAppConfigUpdateVO.getMpState()),
                "H5状态不能为关闭");
        if (Objects.nonNull(defTenantAppConfigUpdateVO.getH5Logo())) {
            appendixService.save(AppendixSaveVO.build(defTenantAppConfigUpdateVO.getId(), AppendixType.System.DEF__H5__LOGO, defTenantAppConfigUpdateVO.getH5Logo()));
        }
        if (Objects.nonNull(defTenantAppConfigUpdateVO.getMpLogo())) {
            appendixService.save(AppendixSaveVO.build(defTenantAppConfigUpdateVO.getId(), AppendixType.System.DEF__MP__LOGO, defTenantAppConfigUpdateVO.getMpLogo()));
        }
        return super.updateBefore(defTenantAppConfigUpdateVO);
    }
}


